Typical data storage devices designed to be compatible with Non-Volatile Memory Eexpress (NVMe) (this specification is available at http://www.nvmexpress.org) and peripheral component interconnect express (PCIe) (this standard is available at http://pcisig.com) standards communicate with a host compute device through a programmable memory interface that includes submission queues and completion queues, defined by the NVMe Workgroup. A processor of the host compute device allocates and assigns message signaled interrupts (e.g., MSI, MSI-X, etc.) and the submission and completion queues for the data storage devices. To pass requests to a data storage device, the processor writes the request to the submission queue according to a predefined format and “rings a doorbell” of the data storage device to notify the data storage device of the request. The ringing of the doorbell of the data storage device is typically accomplished by writing to a specialized memory register (e.g. a doorbell register) or other memory location of the data storage device. Upon completion of the request, the data storage device writes a completion status to the corresponding completion queue and writes to a message signaled interrupt assigned by the processor to notify the processor of the completion of the request.
In some cases, the host may prioritize particular submission queues for time-sensitive or important requests. In such cases, the host may prioritize requests by assigning those high priority requests to the priority queue or otherwise submitting those requests in a particular order to force the desired priority. However, in a typical data storage device, once the requests are fetched from the submission queues, the requests are executed in sequential order. As such, if the data storage device is presently executing a lengthy, previously submitted storage request, any new high priority requests must wait until the completion of the presently executed storage request. In some situations, such as in the case when the presently executed storage request is a large write request, the subsequent higher priority request may be delayed for a significant amount of time.